package city.spring.modules.cardinfo.service;

import city.spring.domain.enums.CardExpenseRecordType;
import city.spring.modules.cardinfo.entity.CardExpenseRecordEntity;
import city.spring.modules.cardinfo.entity.CardNumberEntity;
import com.baomidou.mybatisplus.extension.service.IService;

import java.math.BigDecimal;
import java.util.List;

/**
 * Service：消费记录
 *
 * @author Panxm
 * @date 2020-04-13 16:01:41
 */
public interface CardExpenseRecordService extends IService<CardExpenseRecordEntity> {
    String CACHE_NAME = "card_expense_record";

    /**
     * 业务处理：保存一个 <strong>消费记录</strong>
     *
     * @param entity 消费记录
     */
    void saveCardExpenseRecord(CardExpenseRecordEntity entity, CardNumberEntity cardNumberEntity);

    /**
     * 业务处理：修改一个 <strong>消费记录</strong>
     *
     * @param entity 消费记录
     */
    void updateCardExpenseRecord(CardExpenseRecordEntity entity);

    /**
     * 业务处理：删除一个 <strong>消费记录</strong>
     *
     * @param primaryKey 主键ID
     */
    void deleteCardExpenseRecord(String primaryKey);

    /**
     * 业务处理：删除多个 <strong>消费记录</strong>
     *
     * @param primaryKeys 主键ID列表
     */
    void deleteCardExpenseRecord(List<String> primaryKeys);

    void saveCardExpenseRecord(CardExpenseRecordEntity cardExpenseRecordEntity);

    /**
     * 通过一卡通ID充值金额
     *
     * @param cardNumberId 会员卡ID
     * @param amount       充值金额
     */
    void chargeMoneyByCardId(String cardNumberId, BigDecimal amount);

    /**
     * 通过一卡通会员卡号充值金额
     *
     * @param memberNumber 会员卡号
     * @param amount       充值金额
     */
    void chargeMoneyByMemberNumber(String memberNumber, BigDecimal amount);

    /**
     * 通过一卡通ID去消费
     *
     * @param cardNumberId 会员卡ID
     * @param amount       消费金额（必须是负数）
     * @param type         消费类型
     * @param remarks      消费说明
     */
    void consumptionByCardId(String cardNumberId, BigDecimal amount, CardExpenseRecordType type, String remarks);

    /**
     * 通过一卡通会员卡号去消费
     *
     * @param memberNumber 一卡通会员卡号
     * @param amount       消费金额（必须是负数）
     * @param type         消费类型
     * @param remarks      消费说明
     */
    void consumptionByMemberNumber(String memberNumber, BigDecimal amount, CardExpenseRecordType type, String remarks);

    /**
     * 获取打印收据凭证的数据信息
     *
     * @param ids 消费记录ID列表
     * @return 打印凭据信息
     */
//    PrintReceiptVO getPrintReceiptInfo(List<String> ids);

}
